/*
  ID: nemokin1
  PROG: nocows
  LANG: C++
*/
#include <vector>
#include <list>
#include <assert.h>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <fstream>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <fstream>
 
using namespace std;
 
#define REP(i,n) for(int i=0; i<(n); ++i)
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define FORD(i,a,b) for(int i=(a);i>=b;--i)
#define FOREACH(it,c) for(typeof((c).begin()) it=(c).begin();it!=(c).end();++it)
#define ALL(c) (c).begin(),(c).end()
 
#define debug(x) cerr<< #x << " = " << (x) << "\n";
#define debugv(v) cerr << #v << " = "; FOREACH(it,v) cerr << *it <<","; cerr << "\n";
#define SIZE(a)  (int(a.size()))
 
template<typename T> inline void checkMax(T& a, T b) {if (b>a) a=b;}
template<typename T> inline void checkMin(T& a, T b) {if (b<a) a=b;}
 
typedef long long LL;
typedef vector<int> VI;
typedef vector<string> VS;
typedef long double ld;
const int INF = 1000000000;
LL dp[200][200];

LL dfs(int n, int k)
{
    LL &ans = dp[n][k];
    if(ans != -1) return ans;
    if(n%2 == 0) return (ans=0);
    if(n == 1 && k != 1) return (ans=0);
    if(n == 1 && k == 1) return (ans=1);
    if(k == 1 && n != 1) return (ans=0);
    if(n < 2*k-1) return (ans=0);
    assert(k!=0);
    
    ans = 0;
    for(int i = 2*(k-1)-1; i < n; i++){
	int x = dfs(i,k-1);
	for(int j = 1; j < k-1; j++){
	    int y = dfs(n-1-i,j);
	    ans+=2*x*y;
	}
	ans+=x*dfs(n-1-i,k-1);
	ans%=9901;
    }
    return ans;
}
	
int main() {
    freopen("nocows.in","r",stdin);freopen("nocows.out","w",stdout);
    int N,K;
    cin >> N >> K;
    memset(dp,-1,sizeof(dp));
    LL ret = dfs(N,K);
    cout << ret%9901 << endl;
    exit(0);
}
